package com.sybil.spa.controlador;

import com.sybil.spa.servicio.FlujoServicio;
import com.sybil.spa.servicio.SolicitudServicio;
import java.util.HashMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/solicitudes")
public class SolicitudControlador {

   @Autowired
   private SolicitudServicio solicitudServicio;
   @Autowired
   private FlujoServicio flujoServicio;

   @RequestMapping(value = "/aprobar", params = {"cf", "ns"}, method = RequestMethod.GET)
   public String aprobarSolicitud(@RequestParam("cf") String claveFlujo,
           @RequestParam("ns") int numeroSolicitud, Model model) {
      model.addAttribute("solicitud", solicitudServicio.obtenerSolicitud(claveFlujo, numeroSolicitud));
      return "flujo/historico/aprobar";
   }

   @RequestMapping(value = "/aprobar", params = {"cf", "ns"}, method = RequestMethod.POST)
   public String solicitudProcesar(@RequestParam("cf") String claveFlujo,
           @RequestParam("ns") int numeroSolicitud, @RequestParam("ce") String claveEvento,
           @RequestParam("txa_comentarios") String comentarios) {
      HashMap<String, Object> info = (HashMap<String, Object>) SecurityContextHolder.getContext().getAuthentication().getDetails();
      String usuarioActual = (String) info.get("clave");
      solicitudServicio.aprobarSolicitud(claveFlujo, numeroSolicitud, usuarioActual, claveEvento, comentarios);
      return "redirect:/index";
   }

   @RequestMapping(value = "/aprobar2", method = RequestMethod.POST)
   public String solicitudesProcesar(@RequestParam(value = "ckb_numero_soli", required = false) String[] numeroSolicitudes) {
      String claveFlujo, numeroSolicitud, claveEvento;
      HashMap<String, Object> info = (HashMap<String, Object>) SecurityContextHolder.getContext().getAuthentication().getDetails();
      String usuarioActual = (String) info.get("clave");
      for (String flujoNumero : numeroSolicitudes) {
         String[] split = flujoNumero.split("%");
         claveFlujo = split[0];
         numeroSolicitud = split[1];
         claveEvento = split[2];
         solicitudServicio.aprobarSolicitud(claveFlujo, Integer.parseInt(numeroSolicitud), usuarioActual, claveEvento, "");
      }
      return "redirect:/index";
   }

   @RequestMapping(value = "/historicos", method = RequestMethod.GET)
   public String historicosDelFlujo(Model model) {
      model.addAttribute("flujos", flujoServicio.obtenerFlujos());
      return "flujo/historico/filtros";
   }

   @RequestMapping(value = "/historicos", method = RequestMethod.POST)
   public String historicoDelFlujo(@RequestParam(required = false, value = "fd") String fechaDesde,
           @RequestParam(required = false, value = "fh") String fechaHasta,
           @RequestParam(required = false, value = "est") String estatus,
           @RequestParam(required = false, value = "ns") String numeroSolicitud,
           @RequestParam(required = false, value = "cf") String claveFlujo, Model model) {
      model.addAttribute("solicitudes", solicitudServicio.obtenerHistorico(claveFlujo,
              fechaDesde, fechaHasta, estatus, numeroSolicitud));
      return "flujo/historico/listado";
   }

   @RequestMapping(params = {"cf", "ns"}, method = RequestMethod.GET)
   public String detallesSolicitud(@RequestParam("cf") String claveFlujo,
           @RequestParam("ns") int numeroSolicitud, Model model) {
      model.addAttribute("solicitud", solicitudServicio.obtenerSolicitud(claveFlujo, numeroSolicitud));
      return "flujo/historico/detalle";
   }
}
